iT邦幫忙

2024 iThome 鐵人賽

DAY 21
1

:root

:root 選擇器主要用來針對 HTML 文件的根元素(即 <html>),這與直接使用 html 元素選擇器有些許不同。兩者雖然選擇的都是同一個元素,但 :root 擁有比 html 更高的優先權,因此,:root 選擇器通常會用來定義全局變數,特別是在需要隨時調整樣式時非常方便。

💠:root 基本用法

語法

:root {
	--變數名稱: 變數值;
}

範例

:root {
  --primary-color: #3498db;
  --text-color: #2d3436;
}

body {
  color: var(--text-color);
  background-color: var(--primary-color);
}

通過在 :root 中定義變數,可以將樣式統一管理,當需要調整時,只需要修改變數值,整個網站的相應樣式就會自動更新。

💠實務應用一:統一管理顏色變數

一起試試:[CODEPEN]

在一個網站中,會有主色、次色或更多其他的顏色,在一開始時我們可以這樣寫

<header>
  <h1>Lala Code</h1>
</header>

<main>
  <article>
    <h2>如何提升前端技能</h2>
    <p>隨著技術的快速發展,前端工程師需要不斷提升自己的技能。以下是幾個有效的學習方法:</p>
    <ul>
      <li>參加線上課程和工作坊</li>
      <li>實踐專案,增強實務經驗</li>
      <li>參與開源項目,與其他開發者合作</li>
    </ul>
    <p>持續學習是提升前端技能的關鍵,無論是技術知識還是實踐經驗,都需要投入時間和精力。</p>
  </article>
</main>

<footer>
  <p>版權所有 © 2024 Lala Code</p>
</footer>
body {
  font-family: "Helvetica Neue", Arial, sans-serif;
  margin: 0;
  padding: 0;
  background-color: #ffffff;
}

header {
  background-color: #ffeaa7;
  padding: 20px;
  text-align: center;
}

header h1 {
  margin: 0;
  color: #2d3436;
}

main {
  padding: 20px;
}

article {
  background-color: #f9f9f9;
  color: #2d3436;
  padding: 20px;
  border-radius: 8px;
  box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
}

footer {
  background-color: #ffeaa7;
  padding: 10px;
  text-align: center;
  color: #2d3436;
}

footer p {
  margin: 0;
}

網頁中的顏色有很多重複使用的狀況,我們可以將所有顏色統一抽出來,放到 :root 中統一管理

:root {
  --primary-color: #f9f9f9;
  --secondary-color: #ffeaa7;
  --text-color: #2d3436;
  --background-color: #ffffff;
}

body {
  font-family: "Helvetica Neue", Arial, sans-serif;
  margin: 0;
  padding: 0;
  background-color: var(--background-color);
}

header {
  background-color: var(--secondary-color);
  padding: 20px;
  text-align: center;
}

header h1 {
  margin: 0;
  color: var(--text-color);
}

main {
  padding: 20px;
}

article {
  background-color: var(--primary-color);
  color: var(--text-color);
  padding: 20px;
  border-radius: 8px;
  box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
}

footer {
  background-color: var(--secondary-color);
  padding: 10px;
  text-align: center;
  color: var(--text-color);
}

footer p {
  margin: 0;
}

:root

💠實務應用二:支援 Light Mode 和 Dark Mode

一起試試:[CODEPEN]

隨著系統設置的暗色模式變得越來越普遍,我們可以通過 @media (prefers-color-scheme) 媒體查詢來實現自動的主題切換。這樣用戶的瀏覽器將根據系統設定自動選擇合適的樣式。

設定CSS主題媒體查詢

Light Mode (淺色模式)

@media (prefers-color-scheme: light) 

Dark Mode (暗色模式)

@media (prefers-color-scheme: dark) 

如果沒有明確設定 prefers-color-scheme 的 CSS 規則,那麼瀏覽器會默認使用 Light mode 的設計,也就是你在 :root 中定義的顏色。例如:

:root {
  --primary-color: #f9f9f9;
  --secondary-color: #ffeaa7;
  --text-color: #2d3436;
  --background-color: #ffffff;
}

這樣的設定會被視為 Light mode 的預設值。

我們拿剛剛的範例來做調整,加上 Dark mode 會呈現的顏色

:root {
  --primary-color: #f9f9f9;
  --secondary-color: #ffeaa7;
  --text-color: #2d3436;
  --background-color: #ffffff;
}

@media (prefers-color-scheme: dark) {
  :root {
    --primary-color: #6d5a43;
    --secondary-color: #774100;
    --text-color: #e2dfd5;
    --background-color: #333;
  }
}

因為我們已經把所有顏色放在 :root 管理,其他地方的 CSS 就無需要再做任何改變

切換瀏覽器主題

在 Chrome 瀏覽器可以按 F12 開啟開發人員工具

點擊右上角的「三個點」圖標,選擇「More tools」→「Rendering

Chrome Rendering

找到「Emulate CSS prefers-color-scheme」選項,然後選擇「dark」來模擬暗色模式

Emulate CSS prefers-color-scheme

最後就可以 Dark mode 的顏色囉!

Dark mode


💠總結

:root 為我們提供了一種高效管理全局樣式的方法,特別是在使用變數進行顏色和字級等樣式的統一管理時,顯得非常方便。它的高優先級使得覆蓋性更強,尤其是在 Light 和 Dark Mode 的切換中,使用 :root 定義變數可以更輕鬆地應對不同模式下的樣式需求。


本文將同步更新至 Lala Code



上一篇
:only-child & :only-of-type 讓唯一的元素成為焦點
下一篇
:empty 無聲的存在,掌控隱形的頁面空間
系列文
你的優先選擇是什麼?從 CSS 選擇器到優先級,深入解析與實用技巧30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言